草庐IT

C++ 性能 std::array 与 std::vector

全部标签

c++ - 查找可能是由于线程锁定(可能)引起的性能问题

我花了一些时间运行valgrind/callgrind来分析一个使用许多线程进行大量TCP/IP通信的服务器。在提高性能一段时间后,我意识到在这个特定的测试场景中,进程不受CPU限制,所以我看到的性能“改进”没有用。理论上CPU应该很忙。我知道它连接的TCP/IP设备不是限制,因为服务器在两台机器上运行。一个是PC,另一个是带有Arm处理器的嵌入式设备。即使是嵌入式设备也只有大约2%的CPU使用率,但它执行的事务要少得多——大约十分之一。尽管我们试图尽快获取数据,但两个系统最多只能获取大约2%。我的猜测是某个互斥锁被锁定并占用了一个线程。这是一个纯粹的猜测!系统中有几个线程具有公共(p

c++ - std::chrono::system_time 的 Visual Studio 2017 CRT 实现使用什么时钟?

chrono标题中的注释只是说//wrapsGetSystemTimePreciseAsFileTime/GetSystemTimeAsFileTime但它实际使用的是什么(即我期望的精度是多少)?该实现调用_Xtime_get_ticks,但该函数是不透明的。 最佳答案 CRT在可用时调用GetSystemTimePreciseAsFileTime,否则调用GetSystemTimeAsFileTime。GetSystemTimePreciseAsFileTime为您提供highestpossiblelevelofprecisio

windows - `cleartool lsco -r -cvi -me` 与 `cleartool lsco -graphical` 相比非常慢。是否有可能提高它的性能?

我希望能够在命令行上使用lsco以更好地与Emacs集成,但它运行得非常慢!通常,GUI比较慢! 最佳答案 来自技术说明“Recursivelycheckoutandcheckinelements”:Itisrecommendedthatifperformanceisdegradedduetothisrecursiveoperationthateithertheoperationbechanged(saytocheckout/checkininsmallerchunks)ortostoptheoperationalltogether

c++ - std::tuple get<T>(tuple) 中的重复类型 T - 编译时断言失败

我将可变参数存储到std::tuple中的对象构造函数到目前为止一切顺利。但是当使用存储的参数和std::get()调用对象函数时,我将被抛出一个我根本不理解的编译时断言失败。只有当所有参数都不是不同类型时才会发生这种情况。编译器错误信息是:msvc\14.16.27023\include\tuple(934):errorC2338:duplicatetypeTinget(tuple)如下所示:#include#includeusingnamespacestd;templatestructstore_in_tuple{tuplem_tuple_args;store_in_tuple(A

c# - 将 C++ 或 C# 用于 Windows Kinect 应用程序之间是否存在任何不明显的区别? (例如性能、特性)

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。这只是偏好和熟悉程度的问题,还是语言会产生实际差异?

windows - 如何使用 Delphi 2010 以编程方式确定 Windows 的性能设置

以下代码是在关闭时淡化我的应用程序。procedureTfrmMain.btnClose1Click(Sender:TObject);vari:Integer;beginfori:=255downto0dobeginfrmMain.AlphaBlendValue:=i;application.ProcessMessages;end;Close;end;Windows性能设置为“让Windows选择...”当用上面的代码关闭我的Delphi应用程序时,淡入淡出几乎瞬时(最多¼秒,如果我眨眼,我会错过过渡)。如果我将性能选项设置为“调整以获得最佳性能”退出同一个应用程序时,淡入淡出需要超过

windows - mingw std::thread 与 Windows API

我开始使用C++11std::thread(mingw4.8)到目前为止一切顺利。我遇到了重叠I/O的情况,其中sleepEx用于将线程置于可警告的等待状态。这工作得很好,直到必须使用QueueUserAPC,它返回一个“无效句柄错误”。经过一番查找,发现std::thread使用的是Windows下的pthread库。有没有什么方法可以使用WindowsAPI调用,它需要一个带有std::thread的线程句柄?或者我是否需要坚持使用Windows线程来处理重叠I/O? 最佳答案 为了解决您的问题,MinGW-w64winpthr

.NET 或 Windows 同步原语性能规范

我目前正在写一篇科学文章,我需要在其中非常准确地引用。有人可以指点我MSDN、MSDN文章、一些已发表的文章来源或一本书,我可以在其中找到Windows或.NET同步原语的性能比较。我知道这些按性能降序排列:InterlockedAPI、CriticalSection、.NETlock-statement、Monitor、Mutex、EventWaitHandle、Semaphore。非常感谢,奥瓦内斯附言我找到了一本好书:ConcurrentProgrammingonWindowsbyJoeDuffy.这本书是由.NETFramework的一位主要并发开发人员编写的,非常精彩,有很多

windows - 从性能的角度来看,虚拟地址空间映射如何才能被接受?

这个问题针对任何使用VAS模型的操作系统,但我将指定windowsnt,因为这是我最了解的系统。众所周知,默认情况下,32位Windows上的进程会单独获得2GB的内存。该内存可以位于系统内存、交换文件、USB驱动器等中。这意味着多个进程可以在地址0x12345678分配内存,但是这当然不可能映射到相同的物理内存。我的问题是,如何在不完全破坏性能的情况下做到这一点?处理器是否有某种机制来映射内存地址?每次我们不想访问内存时要求操作系统进行映射查找,看起来很慢.. 最佳答案 有一个硬件设备可以进行翻译-它叫做MemoryManagem

C++ Vector 给出难以置信的意外值(value)

我有这个代码:std::vectorloc;loc.push_back(cpx);loc.push_back(cpy);loc.push_back(play.GetSize().x);loc.push_back(70);std::cout在我正在制作的游戏中,但即使当我打印loc[2]和loc[3]的值时,它们与它们应该的值完全不同,当我运行这段代码时,我得到loc[3]等于70070而不是70.有人知道如何解决这个问题吗? 最佳答案 你还有一个cout没有endl或\n您忘记删除的代码中的某处。那个打印700,而70是代码示例中最